<?php
/**
 * --------------------------------------------------------------------
 * 节点权限映射
 * --------------------------------------------------------------------
 * @author Midnight, yangyunzhou@foxmail.com
 * --------------------------------------------------------------------
 * @copyright Midnight Studio
 * --------------------------------------------------------------------
 */
class AccessModel extends RbacModel {

	/**
	 * 字段
	 * @var Array
	 */
	public $fields = array('role_id','node_id','level','pid');


	/**
	 * 获取角色的节点权限
	 * @param String $role 角色ID
	 * @param String $level 链接等级
	 */
	public function get($role, $level) {
		$val = $this->field('node_id')->where("`role_id`='$role' AND `level`='$level'")->select();
		$a = array();
		foreach($val as $v) $a[] = $v['node_id'];
		return implode(',', $a);
	}

	/**
	 * 授权角色的节点权限
	 * @param Array $data 数据集
	 * @param String $type 操作类型
	 */
	public function set($role_id, $node_id, $level) {
		// 添加之前确认是否存在数据
		$data = $this->query("SELECT * FROM `__TABLE__` WHERE `role_id`='$role_id' AND `node_id`='$node_id' AND `level`='$level' LIMIT 1");

		// 不存在数据则插入数据
		if(empty($data)) {
			return $this->execute("INSERT INTO `__TABLE__` (`role_id`,`node_id`,`level`) VALUES ('{$role_id}','{$node_id}','{$level}')");
		} else
			return FALSE;
	}

	/**
	 * 删除角色的节点权限
	 * @param Array $data 数据集
	 * @param String $type 操作类型
	 */
	public function del($role_id, $node_id, $level) {
		/*
		 * 检测节点长度, 生成节点sql条件
		 * 数组大于一视为多节点删除, 调整条件
		 */
		if( count($node_id) >= 1 ) $node_id = 'AND `node_id` IN ('.implode(',', $node_id).')';
		else $node_id = "AND `node_id`='{$node_id[0]}'";

		// 执行删除操作
		return $this->execute("DELETE FROM __TABLE__ WHERE `role_id`='{$role_id}' AND `level`='{$level}' {$node_id}");
	}

}